 
\chapter*{GRUNT}
  

 Пришла пора от овечек перейти к другим животным на
    ту же букву О – к оркам. Мы попробовали на вкус два рендерера,
    каждый со своими премудростями, особенностями и сильными сторонами.
    Gelato – универсальный продукт, хорошо приспособленный для
    большинства ставящихся в реальном продакшне задач; Jot –
    университетский проект; он умеет рендерить только картунные линии,
    но делает это хорошо и включает в себя интерактивный редактор таких
    линий и их стилей. Вы можете попробовать применить оба продукта в
    своей повседневной работе – а теперь я бы хотел рассказать о
    рендерерах, применить которые в своей работе вы врядли сможете. Это
    внутренние разработки иностранных студий, которые используются ими
    в производстве кино и рекламы. Почему эти студии занимаются такими
    разработками? Что их не устраивает в prman’е, Mental Ray’е и прочих
    общедоступных продуктах? Попробуем ответить на этот
    вопрос.
  

 Надеюсь, все присутствующие смотрели хотя бы один
    из фильмов трилогии “Властелин Колец”? Тогда вы, как и я, были
    впечатлены огромными батальными сценами, в которых участвовали
    тысячи, если не десятки тысяч сгенерированных компьютером бойцов –
    орков, людей, эльфов и прочих сказочных персонажей.
  

 Новозеландская студия Weta Digilal, автор
    спецэффектов в трилогии, использует в качестве основы своего
    пайплайна две “коробочных” программы – Maya и Renderman Pro Server.
    Но как и всякая другая серьёзная студия, Вета старается
    минимизировать свои расходы и максимально ускорить производственный
    процесс – именно поэтому в батальных сценах использовался
    специализированный рендерер под названием GRUNT, созданный
    сотрудником студии Джоном Эллитом (Jon Allitt).
  

 Этот рендерер (а его название расшифровывается как
    General Renderer of Unlimited Numbers of Things) имеет одно
    неоспоримое преимущество перед prman’ом – он использует A-buffer
    модель рендеринга. В ситуации с батальной сценой с участием десятка
    тысяч персонажей, Renderman Pro Server пытается оптимизировать
    расход памяти и бьёт картинку на квадратные кусочки, каждый из
    которых будет просчитываться отдельно. На тот случай, если уже
    обсчитанная геометрия потребуется в следующем кусочке, информация о
    ней сохраняется в кэш – иначе накладные расходы на
    выгрузку/загрузку/пересчёт одного и того же серьёзно замедлят
    процесс.
  

 Для
    продвинутых: по-научному
    кусочки  эти называются
    “бакеты”. Prman в процессе
    рендеринга использует бакеты размером по умолчанию 16x16 пикселей и
    затем обрабатывает сцену не всю целиком, а по таким вот кусочкам –
    и по окончании работы с очередным куском занимаемая им память
    освобождается. Так вот проблема состоит в том, что на огромных
    сценах, в особенности с полупрозрачными и мелкими объектами, с
    большим displacement, с применением motion blur и Depth of field
    (ну то есть в типичном кино или телевизионном проекте) – в бакете
    накапливаются очень большие объёмы информации. Добавьте к этом кэш
    обработанной геометрии, о котором мы говорили выше.  Конечно, изворотливые
    пользователи придумали множество различных решений и обходных
    манёвров – но суть проблемы от этого не меняется.
  

 Для нашей батальной сцены  даже на машинах с несколькими
    гигабайтами оперативной памяти prman вылетает из-за нехватки оной –
    просто потому, что кэш становится слишком большим. GRUNT этого
    недостатка лишён – он поддерживает в памяти только A-buffer (то
    есть, Z-buffer, набор нормалей, координаты точки на поверхности,
    цвет и некоторую другую информацию для каждого пикселя картинки) и
    обходится без кэша моделей, просто подгружая каждого нового орка,
    рендеря его, обновляя A-buffer и затем выгружая орка. Чтобы
    упростить понимание системы – представьте себе композитинг по
    Z-буферу – если у вас есть что-то, что находится дальше
    Z-координаты – вы его не рендерите и вас слабо интересует, что
    именно изображено на соответствующем пикселе – если это не стекло,
    конечно. Но поскольку орки и эльфы в трилогии Толкиена не ходят в
    стеклянных доспехах – считайте, что вам очень сильно
    повезло.
  

 Любопытно, что GRUNT начинался в 1992 году как
    универсальный рендерер (и анимационная система) для операционной
    системы OS/2 и активно использовался при производстве мультфильмов
    и телевизионной рекламы. В 1992м году 32 мегабайта памяти на
    персональном компьютере были огромным размером – и выбор технологии
    A-буфера дал возможность даже на таком маленьком объёме памяти
    рендерить очень большие сцены. Позднее, когда Джон присоединился к
    Weta Digital, ему пришло в голову, что массовые батальные эпизоды –
    отличное поле деятельности для его прежде универсального
    рендерера.
  

 Итак, основное преимущество специального рендерера
    – это используемая в его ядре технология, которая позволяет
    рендерить удивительно сложные сцены. Что ещё даёт для студии
    обладание таким инструментом?
  

 Во-первых, это возможность гибкой настройки для
    определённых задач. Ведь если у вас в руках есть исходный код
    продукта и более того – вы его автор – то никакой prman не даст вам
    подобной гибкости. Обратите внимание – я говорю именно о гибкости,
    а не мощности или скорости работы.
  

 Во-вторых – возможность серьёзной оптимизации под
    свои задачи. От продукта никто не требует расширяемой модели
    освещения и поддержки Renderman-шейдеров – и шейдеры для него
    пишутся на C++ и оптимизируются по самое немогу. Программой часто
    пользуются на этапе настройки сцены – и поэтому встроен специальный
    механизм, который позволяет сбрасывать промежуточные результаты
    рендеринга и сразу же их просматривать. Pipeline компании заточен
    под композитинг при помощи Shake – и GRUNT умеет считать в слои.
    Почти все кадры рассчитываются с использованием “фермы” – и
    рендерер умеет делить сложную сцену на несколько простых для такого
    просчёта.
  

 Основным поставщиком информации и моделей для GRUNT
    является другой специальный продукт – Massive, который отвечает за
    правдоподобное поведение компьютерных персонажей на поле боя.
    Massive посредством простых текстовых файлов передаёт в рендерер
    как обычную (для рендерера) информацию (например, направление
    движения каждого объекта, его размер и положение), так и необычные
    вещи – например, в какую одежду нужно одеть того или иного
    персонажа. Если бы для всего этого использовались RIBы, то объём
    занимаемого дискового пространства был бы огромным. В данном
    случае, все необходимые алгоритмы и схемы встроены непосредственно
    в рендерер, который анализирует входные данные и на лету собирает
    необходимую модель, которую затем рендерит. Ту же самую текстовую
    начинку умеет генерировать посредством простых Mel-скриптов и Maya
    – и на этом этапе разница между prman и GRUNT для TD, работающих в
    Вете, стирается.
  

 Как показывает практика, число компаний,
    занимающихся производством компьютерной графики, анимации и
    рекламы, и при этом имеющих возможность позволить себе пользоваться
    своими собственными разработками – исчезающе мало. Сказывается как
    себестоимость таких разработок, которая ставит под вопрос
    возможность их окупить, так и высокий порог сложности такой задачи.
    Появление на рынке Maya с внутренним языком программирования Mel
    сильно уменьшила этот порог – практически невозможно найти
    пользователя Maya, который бы не писал собственных скриптов. С
    собственными рендерерами, несмотря на все преимущества, ситуация
    куда сложнее – они остаются вотчиной крупных студий или отчаянных
    чудаков, как в нашем следующем примере.
  
\chapter*{Spore}
  

 Рассказ об этом, не побоюсь громкого слова,
    революционном рендерере будет одной из самых сложных для меня
    частей в главе. Всё дело в том, что готовя материал к публикации, я
    попытался пообщаться напрямую с людьми, непосредственно связанными
    с разработкой тех или иных продуктов. В большинстве случаев мне это
    удалось – не скрою, многим разработчикам очень приятно и лестно,
    когда результат их труда освещается в книге (пусть и
    русскоязычной).
  

 Многим, но не Ричарду Бейли.
  

 Мы общались с доктором Бейли в течение нескольких
    недель, обменявшись не одним десятком писем по e-mail. И за всё это
    время я не узнал ничего нового про Spore. То есть вообще ничего.
    Можете мне поверить, я действительно старался. Поэтому всё, что вы
    прочитаете здесь о творении Ричарда, взято исключительно из
    открытых источников; впрочем, даже эта горстка информации
    впечатляет.
  

 Что же делает Sporе настолько особенным, чтобы мы
    посвятили ему главу в своей книге?
  

 Spore – это узкоспециализированный рендерер,
    предназначенный для одного типа геометрии – партиклов. Но зато
    оптимизирован он под этот тип настолько, что позволяет рендерить в
    одной сцене недостижимое для других систем число частиц – более
    миллиарда. Такое количество взаимодействующих партиклов переводит
    эффекты, которые можно достичь при помощи Spore, в кардинально
    новую плоскость – сам автор рендерера не боится говорить, что
    перешёл на уровень фотонных эффектов и теперь занимается не
    рендерингом, а световой скульптурой.
  

 Результаты работы маленькой студии Ричарда Бейли
    под названием Image Savant выглядят немного психоделически –
    впрочем, это не удивительно, потому что все свои инструменты – а
    студия работает исключительно на своих собственных программах и
    рендерерах – Ричард рассматривает как пробы в живописи и
    любительские арт-проекты. Впрочем, для небольшой студии и
    психоделически выглядящего “любительского” портфолио у Image Savant
    неплохой список заказчиков и фильмов – назовём лишь поверхность
    планеты Солярис в одноимённом американском ремейке и внутренности
    Земли в фильме The Core.
  

 Поскольку Spore является единственным источником
    существования небольшой студии, все детали внутреннего устройства
    этого рендерера доктор Бейли хранит в строгой тайне. Известно лишь,
    что, имея полный доступ к исходному коду – и являясь автором этого
    кода – Ричард фактически настраивает свой продукт для каждого
    проекта и, возможно, для каждого кадра. В ходе работы над фильмом
    Solaris Image Savant выдала на гора 45 минут высококачественной
    16ти-битной анимации в разрешении 2k за несколько (2-3) месяцев,
    что говорит об экстраординарной скорости и гибкости рендерера.
    Скорее всего, Spore не предусматривает шейдеры в том виде, к
    которому мы привыкли после Maya, Renderman и Mental Ray, но, как и
    GRUNT, позволяет использовать некие заранее предусмотренные модели
    закраски. Опять же, полный доступ к коду продукта позволяет
    получать промежуточные результаты на любой стадии просчёта кадра –
    мало какой рендерер похвалится такой гибкостью.
  

 Так о чём же мы могли говорить с Ричардом в ходе
    нашего онлайнового интервью, спросите вы, если я ничего не узнал о
    его рендерере? О многом. Например, о том, что единственная
    программа, которую используют в своей работе сотрудники Image
    Savant и которую они не написали сами – это Shake, причём версии 1,
    без визуального интерфейса, исключительно через скрипты - и
    переходить на более свежие версии эти мазохисты отказываются
    категорически. О том, что в современном мире кинопродакшна вполне
    можно взять и открыть студию из 3х человек, которые займут свою
    собственную нишу и будут обеспечены работой на многие годы вперёд –
    не имея ни копейки денег и ни одного заказа на старте. О том, что
    хорошие, “правильные” программы пишутся чаще всего не
    программистами. О том, каким будет следующий рендерер
    студии  и что он
    позволит сделать (втайне надеюсь, что у них опять всё получится). О
    том, наконец, насколько сложен в изучении русский язык для
    англоязычных – надеюсь, наша книга поможет Ричарду в решении и этой
    задачи.
  

 Вероятнее всего, мы никогда не увидим Spore
    продающимся в виде коробочного продукта и те из вас, кто не
    поступит на работу в студию Image Savant, никогда не узнают, есть
    ли у этого продукта интерфейс к Maya. Впрочем, это не так уж и
    важно. Не знаю, как вам, а мне просто достаточно знать, что
    возможность рендерить миллиард партиклов на кадр – есть. Значит,
    если немного постараться, то можно будет обработать и превратить в
    потрясающе красивый кинокадр и 10 миллиардов частиц – а кто знает,
    может, из такой разработки родится и ваша студия?